package org.example.ssh.base

import net.schmizz.sshj.SSHClient
import net.schmizz.sshj.sftp.SFTPClient
import org.example.ssh.DeployRedis

// 打包：打包jar（本地/本地部署的服务器） -> 传到目标server（本地部署的服务器） 打包镜像 -> 上传镜像到仓库
// 更新：对生产server批量更新镜像 -> 批量stop/del旧容器 -> 批量启动新容器
// 日志：批量同步日志到本地 -> 批量删除生产服务器上的久远的日志文件 -> 对日志文件分析/过滤/统计/过滤显示

suspend fun main() {
    val ssh = SSHClient()
    ssh.loadKnownHosts()
    ssh.connect("38.147.171.207", 22)
    try {
        ssh.authPassword("root", "cd58bfeb#41c0@E")

        test02(ssh)
    } catch (e: Exception) {
        ssh.close()
        e.printStackTrace()
        return
    }

}

suspend fun test02(ssh: SSHClient) {
//    val setting = InitServerSetting()
//    setting.setKvCfg(ssh, "vm.overcommit_memory", "1", "/etc/sysctl.conf")
//    setting.watch(ssh)
//    executeCmdPrint(ssh, "ss -tuln | grep SYN-RECV | wc -l")
//    executeCmdPrint(ssh, "sudo iptables -L --line-numbers -n -v")
//    executeCmdPrint(ssh, "sudo iptables-save")

    val deployRedisCluster = DeployRedis()
    deployRedisCluster.deploy(ssh)
}


fun test01(ssh: SSHClient) {
    try {
        var res = executeCmd(ssh, "ls -la")

        val fileList = parseLsOutput(res)
        for (file in fileList) {
            println(file)
        }
        println("------------")

        println(res)
        res = executeCmd(ssh, "cd /home")
        println(res)
        res = executeCmd(ssh, "ls")
        println(res)

        // 打开 SFTP 客户端
        val sftp: SFTPClient = ssh.newSFTPClient()
        try {
            // 创建远程目录
            if(!exists(sftp, "/home/test")) {
                sftp.mkdir("/home/test")
                println("创建文件夹成功")
            }

            // ✅ 1. 上传文件：本地 → 远程   会直接覆盖
//            if(exists(sftp, "/home/test/zk_kafka.zip")) {
//                sftp.rm("/home/test/zk_kafka.zip")
//            }
            sftp.put("E:\\sql\\zk_kafka.zip", "/home/test/zk_kafka.zip")
            println("文件上传成功")

            // ✅ 2. 下载文件：远程 → 本地    会直接覆盖
            sftp.get("/home/test/zk_kafka.zip", "E:\\sql\\zk_kafka1.zip")
            println("文件下载成功")

            // ✅ 3. 上传整个目录（递归）
//            if(exists(sftp, "/home/test1")) {
//                deleteDirectoryRecursive(sftp, "/home/test1")
//                sftp.mkdir("/home/test1")
//            }
//            uploadDirectoryRecursive(sftp, "E:\\sql", "/home/test1")
////            sftp.put("E:\\sql", "/home/test1")
//
//            // ✅ 4. 列出远程目录内容
//            val list = sftp.ls("/home/test")
//            list.forEach { println("File: ${it.name}, Size: ${it.path}, Dir: ${it.isDirectory}") }
//
//            // ✅ 6. 删除文件
//            if(exists(sftp, "/home/test/zk_kafka.zip")) {
//                sftp.rm("/home/test/zk_kafka.zip")
//            }

        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            sftp.close() // 关闭 SFTP
        }

    } catch (e: Exception) {
        e.printStackTrace()
    } finally {
        ssh.disconnect()
    }
}



